package cn.zyq.ykb.beans.task;

import cn.zyq.ykb.beans.config.ConfigTaskType;
import cn.zyq.ykb.beans.task.vo.MyTaskVo;
import cn.zyq.ykb.beans.task.vo.TaskPackageVo;
import cn.zyq.ykb.beans.user.User;
import cn.zyq.ykb.system.annotation.Excel;
import cn.zyq.ykb.system.common.BaseBean;
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.persistence.*;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 任务对象 task
 *
 * @author SystemAuth
 * @date 2023-05-22
 */
@Data
@Entity
@Table(name = "`task`")
@JsonInclude(value = JsonInclude.Include.NON_NULL)
public class Task extends BaseBean implements Serializable {
    /**
     * 主键id，用于关联
     */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY, generator = "JDBC")
    @Column(name = "`taskID`")
    @ApiModelProperty("主键id，用于关联")
    private Integer taskID;
    /**
     * 产品/APP名称
     */
    @Column(name = "`productName`")
    @Excel(name = "产品名称")
    @ApiModelProperty("产品/APP名称")
    private String productName;
    /**
     * 任务名称
     */
    @Column(name = "`taskName`")
    @Excel(name = "任务名称")
    @ApiModelProperty("任务名称")
    private String taskName;
    /**
     * 任务logo
     */
    @Column(name = "`logo`")
    @ApiModelProperty("任务logo")
    private String logo;
    /**
     * 任务描述
     */
    @Column(name = "`describe`")
    @Excel(name = "任务描述")
    @ApiModelProperty("任务描述")
    private String describe;
    /**
     * 任务须知
     */
    @Column(name = "`notice`")
    @Excel(name = "任务须知")
    @ApiModelProperty("任务须知")
    private String notice;
    /**
     * 任务来源用户ID
     */
    @Column(name = "`userID`")
    @Excel(name = "任务来源用户")
    @ApiModelProperty("任务来源用户ID")
    private Integer userID;
    /**
     * 修改前任务状态
     */
    @Column(name = "`uptState`")
    @ApiModelProperty("修改前任务状态")
    private Integer uptState;
    /**
     * 推广方式
     */
    @Column(name = "`way`")
    @ApiModelProperty("推广方式")
    private Integer way;
    /**
     * 价格/钻石
     */
    @Column(name = "`price`")
    @Excel(name = "价格")
    @ApiModelProperty("价格/钻石")
    private BigDecimal price;
    /**
     * 订单类型（1任务发布，2修改单价，3增加数量，4减少数量）
     */
    @Column(name = "`orderType`")
    @ApiModelProperty("订单类型（1任务发布，2修改单价，3增加数量）")
    private Integer orderType;
    /**
     * 任务数量
     */
    @Column(name = "`number`")
    @Excel(name = "任务数量")
    @ApiModelProperty("任务数量")
    private Integer number;
    /**
     * 提交时间（单位时）
     */
    @Column(name = "`submitTime`")
    @Excel(name = "提交时间（单位时）")
    @ApiModelProperty("提交时间（单位时）")
    private Integer submitTime;
    /**
     * 结束时间
     */
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    @Column(name = "`endTime`")
    @ApiModelProperty("结束时间")
    private LocalDateTime endTime;
    /**
     * 审核周期
     */
    @Column(name = "`auditTime`")
    @Excel(name = "审核周期（单位时）")
    @ApiModelProperty("审核周期（单位时）")
    private Integer auditTime;
    /**
     * 手机系统（1不限、2安卓、3IOS）
     */
    @Column(name = "`system`")
    @Excel(name = "手机系统",readConverterExp = "1=不限,2=安卓,3=IOS")
    @ApiModelProperty("手机系统（1不限、2安卓、3IOS）")
    private Integer system;
    /**
     * 状态（1进行中，2待审核，3已成功，4未成功，5补交，6已暂停，7待支付）
     */
    @Column(name = "`taskState`")
    @Excel(name = "状态",readConverterExp = "1=进行中,2=待审核,3=已成功,4=未成功,5=补交,6=已暂停,7=待支付")
    @ApiModelProperty("状态（1进行中，2待审核，3已成功，4未成功，5补交，6已暂停，7待支付）")
    private Integer taskState;
    /**
     * 任务类型（1应用，2拉新，3证券，4金融，5游戏）
     */
    @Column(name = "`configTaskTypeID`")
    @ApiModelProperty("任务类型ID")
    private Integer configTaskTypeID;

    /**
     * 预估用时（单位时）
     */
    @Column(name = "`expectTime`")
    @Excel(name = "预估用时（单位时）")
    @ApiModelProperty("预估用时（单位时）")
    private Integer  expectTime;
    /**
     * 剩余数量
     */
    @Column(name = "`residueNumber`")
    @Excel(name = "剩余数量")
    @ApiModelProperty("剩余数量")
    private Integer residueNumber;
    /**
     * 剩余数量
     */
    @Column(name = "`status`")
    @Excel(name = "任务难度",readConverterExp = "1=简单任务,2=困难任务")
    @ApiModelProperty("任务难度（1.简单任务，2.困难任务）")
    private Integer status;
    /**
     * 剩余数量
     */
    @Column(name = "`taskPackageID`")
    @ApiModelProperty("任务包类型（1.工作室任务包，2.地推优选任务包，3.线上推广任务包）")
    private Integer taskPackageID;
    /**
     * 浏览量
     */
    @Column(name = "`pageView`")
    @Excel(name = "浏览量")
    @ApiModelProperty("浏览量")
    private Integer pageView;
    /**
     * 已付总金额
     */
    @Column(name = "`actualPrice`")
    @ApiModelProperty("已付总金额")
    private BigDecimal actualPrice;
    /**
     * 是否屏蔽（0否，1是）
     */
    @Column(name = "`isScreen`")
    @ApiModelProperty("是否屏蔽（0否，1是）")
    private Integer isScreen;
    /**
     * 渠道
     */
    @Column(name = "`channel`")
    @ApiModelProperty("渠道")
    private String channel;
    /**
     * 文字信息
     */
    @Column(name = "`remark`")
    @ApiModelProperty("文字信息")
    private String remark;
    /**
     * 文件地址
     */
    @Column(name = "`url`")
    @ApiModelProperty("文件地址")
    private String url;
    /**
     * 任务区分（1.平台任务，2悬赏任务）
     */
    @Column(name = "`state`")
    @Excel(name = "任务区分",readConverterExp = "1=平台任务,2=悬赏任务")
    @ApiModelProperty("任务区分（1.平台任务，2悬赏任务）")
    private Integer state;
    /**
     * 证券类型（1.限三证券，2不限三证券，3任意卡，4基金户）
     */
    @Column(name = "`zqType`")
    @ApiModelProperty("证券类型（1.限三证券，2不限三证券，3任意卡，4基金户）")
    private Integer zqType;
    /**
     * 刷新道具时间戳
     */
    @Column(name = "`sxProp`")
    @ApiModelProperty("刷新道具时间戳")
    private Long sxProp;
    /**
     * 置顶道具时间戳
     */
    @Column(name = "`zdProp`")
    @ApiModelProperty("置顶道具时间戳")
    private Long zdProp;
    /**
     * 刷新过期时间
     */
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    @Column(name = "`sxExpireTime`")
    @ApiModelProperty("刷新过期时间")
    private LocalDateTime sxExpireTime;
    /**
     * 置顶过期时间
     */
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    @Column(name = "`zdExpireTime`")
    @ApiModelProperty("置顶过期时间")
    private LocalDateTime zdExpireTime;
    /**
     * 待支付金额
     */
    @Column(name = "`payMent`")
    @ApiModelProperty("待支付金额")
    private BigDecimal payMent;
    /**
     * 剩余总金额
     */
    @Column(name = "`residueAmount`")
    @ApiModelProperty("剩余总金额")
    private BigDecimal residueAmount;
    /**
     * 排序（-1最后，0默认，1置顶）
     */
    @Column(name = "`taskSort`")
    @ApiModelProperty("排序（-1最后，0默认，1置顶）")
    private Integer taskSort;
    /**
     * 体验价
     */
    @Column(name = "`experPrice`")
    @ApiModelProperty("体验价")
    private BigDecimal experPrice;
    /**
     * 待支付金额
     */
    @Transient
    @ApiModelProperty("支付渠道编码")
    private Integer channelId;

    @Transient
    @ApiModelProperty("任务步骤列表")
    private List<TaskStep> taskStepList;

    @Transient
    @ApiModelProperty("任务提示信息列表")
    private List<TaskPrompt> taskPrompts;

    @Transient
    @ApiModelProperty("任务做单素材")
    private TaskMaterial taskMaterial;


    @Transient
    @ApiModelProperty("包统计")
    private TaskPackageVo taskPackageVo;

    @Transient
    @ApiModelProperty("任务包数据")
    private TaskPackage taskPackage;

    @Transient
    @ApiModelProperty("待审核数量")
    private Integer dshNumber = 0;

    @Transient
    @ApiModelProperty("已完成数量")
    private Integer ywcNumber = 0;

    @Transient
    @ApiModelProperty("已完成数量")
    private List<MyTaskVo> myTaskVos;

    @Transient
    @ApiModelProperty("审核统计")
    private MyTask myTasks;

    @Transient
    @ApiModelProperty("任务类型列表")
    private ConfigTaskType configTaskType;

    @Transient
    @ApiModelProperty("用户数据")
    private User user;

    @Transient
    @ApiModelProperty("任务审核数据")
    private TaskAudit taskAudit;

    /**
     * 获得奖励类型（0、默认现金；1、钻石）
     */
    @Transient
    @ApiModelProperty("获得奖励类型（0、默认现金；1、钻石）")
    private Integer priceType = 0;

    @Transient
    @ApiModelProperty("支付宝支付方式1 安卓 2 IOS")
    private Integer phoneSystems;

    @Transient
    @ApiModelProperty("来源用户ID")
    private Integer lyUserID;

    @Transient
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty("任务领取时间")
    private LocalDateTime tjTime;

    @Transient
    @ApiModelProperty("领取审核信息")
    private MyTaskAudit myTaskAudit;
}
